录音(电平测量)
AudioRecorder 类允许您将音频数据录制到文件。它提供了开始、停止、暂停和管理音频录制的功能,并可配置音频质量、采样率、格式等。
功能
- 从系统的活跃输入设备录制音频。
- 可以录制指定时长,或在手动停止前一直录制。
- 暂停并恢复录制。
- 删除已录制的音频文件。
用法
设置 SharedAudioSession
在创建 AudioRecorder 实例之前,需要先设置 SharedAudioSession。因为音频会话与硬件相关,因此需要确保正确激活会话。
创建 AudioRecorder 实例
使用 create 方法来创建一个音频录制器实例:
录制音频
您可以使用 record() 方法开始录制:
也可以提供额外的选项来控制录制开始的时间及录制时长:
暂停和停止录制
暂停录制:
停止录制:
删除录音文件
要删除已经录制好的文件:
释放 Recorder
当不再需要使用录制器时,应调用 dispose() 来释放资源:
事件处理
可以使用 onFinish 和 onError 回调来处理录制完成和错误情况:
电平表(VU meter / 音量条)
AudioRecorder 在录制过程中可以输出输入信号的平均功率与峰值功率(dBFS),
用于绘制 VU 表或基于响度做触发逻辑,但不会暴露原始 PCM 数据。
可以在创建时打开 meteringEnabled,也可以在调用 record() 之前设置该属性:
也可以不使用回调,自己手动轮询:
电平定时器在 pause() / stop() / dispose() 时自动停止,下一次 record() 时
若 onLevelUpdate 仍然存在则会自动恢复。
如果需要原始 PCM 采样、实时波形数据或音高检测,请改用
AudioCapture。AudioRecorder主要用于把编码后的音频写入文件(m4a / aac / flac / opus / mp3 / wav)。
API 参考
AudioRecorder.create(filePath, settings?)
使用指定的设置创建一个 AudioRecorder 实例。
- filePath (string): 要录制到的文件系统路径。
- settings (可选对象): 录音的音频设置:
- format (AudioFormat): 音频数据的格式,可选值包括
"LinearPCM","MPEG4AAC","AppleLossless","AppleIMA4","iLBC","ULaw"。 - sampleRate (number): 采样率,单位为赫兹 (范围 8000 到 192000)。
- numberOfChannels (number): 声道数量 (1 到 64)。
- encoderAudioQuality (AVAudioQuality): 音频编码质量 (从
AVAudioQuality.min到AVAudioQuality.max)。
- format (AudioFormat): 音频数据的格式,可选值包括
返回值: 一个 Promise,解析后返回 AudioRecorder 实例。
AudioRecorder.isRecording
一个布尔值,用于指示录制器当前是否正在录音。
AudioRecorder.currentTime
从录音开始到当前的时间(单位为秒)。
AudioRecorder.deviceCurrentTime
主机音频设备的当前时间(单位为秒)。
AudioRecorder.record(options?)
开始录制音频。
- options (可选对象):
- atTime (number): 相对于
deviceCurrentTime,指定开始录制的时间。 - duration (number): 录音时长(单位为秒)。
- atTime (number): 相对于
返回值: 一个布尔值,表示录制是否成功开始。
AudioRecorder.pause()
暂停当前录制。
AudioRecorder.stop()
停止录制并关闭音频文件。
AudioRecorder.deleteRecording()
删除已经录制的音频文件。
返回值: 一个布尔值,表示删除操作是否成功。
AudioRecorder.dispose()
释放录制器所使用的资源。
AudioRecorder.onFinish
录音完成后调用的回调函数。
- success (boolean): 表示录制是否成功完成。
AudioRecorder.onError
在录制或编码出现错误时调用的回调函数。
- message (string): 描述错误的字符串。
AudioRecorder.meteringEnabled
是否启用电平测量。在 record() 之前打开(或在 create 时传 meteringEnabled: true),
averagePower、peakPower 与 onLevelUpdate 才会有数据。
AudioRecorder.levelUpdateInterval
onLevelUpdate 的触发间隔,单位毫秒。Clamp 到 [16, 1000],默认 50。
AudioRecorder.updateMeters()
刷新电平值。如果不使用 onLevelUpdate,需要在读取 averagePower / peakPower 前调用。
AudioRecorder.averagePower(channel?)
返回指定声道的平均功率(dBFS),大致范围 [-160, 0]。
未启用电平测量或未在录音时返回 0。
- channel (number, 可选): 声道索引,默认
0。
AudioRecorder.peakPower(channel?)
返回指定声道的峰值保持功率(dBFS)。
AudioRecorder.onLevelUpdate
录音过程中按 levelUpdateInterval 频率触发的回调(仅在 meteringEnabled === true 时)。
- level.averagePower (number): 各声道平均功率的均值(dBFS)。
- level.peakPower (number): 各声道峰值功率的均值(dBFS)。
- level.channels (
{ average; peak }[]): 每个声道的具体值。 - level.timestamp (number): 采样时刻的
deviceCurrentTime(秒)。
使用示例
使用 AudioRecorder 类,您可以在脚本中轻松管理音频录制操作,并灵活控制音频录制流程。
